package com.exercise.module.common.config.service;/**
 * Created by kete on 2017-05-11.
 */

import com.exercise.core.util.WebUtil;
import com.exercise.module.common.dao.entity.SysConfig;
import com.exercise.module.common.dao.mapper.SysConfigMapper;
import com.exercise.module.common.spring.SpringApplicationContext;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * 作者：kete
 * 创建时间：2017-05-11 16:31
 * 功能描述：
 * 版本：
 */
@Service
public class ConfigService {

    @Autowired
    private SysConfigMapper sysConfigMapper;


    /**
     * 作者：闫广坤
     * 创建时间：2014-12-09 上午11:08:45
     * 方法描述：非注解方式获取实例。
     * @return
     */
    public static ConfigService getInstance() {

        return SpringApplicationContext.getBean(ConfigService.class);
    }

    /**
     * 作者：闫广坤
     * 创建时间：2014-12-09 上午11:20:27
     * 方法描述：通过key，获取配置项的值。
     * @param key 。
     * @return 配置项的值。
     */
    public String getString(String key) {

        try {
            String value = "";

//            if(CacheManager.isInit()) {
//                value = CacheManager.get("sys_config_" +key);
//
//                if(StringUtils.equalsIgnoreCase("-1", value))
//                    return null;
//                if(StringUtils.isNotEmpty(value))
//                    return value;
//            }

            SysConfig sysConfig = sysConfigMapper.selectByConfigKey(key, getConfigPrefix());
            if(sysConfig == null) {
                value = "";
            } else {
                value = sysConfig.getConfigValue();
            }

//            if(CacheManager.isInit()) {
//                if(StringUtils.isEmpty(value)) {
//                    CacheManager.set("sys_config_" +key,"-1", 5 * 60);
//                } else {
//                    CacheManager.set("sys_config_" +key,value, 5 * 60);
//                }
//            }
            return value;
        } catch(Exception e) {
            e.printStackTrace();
//            throw new EbsException("ebidding_config_noexists_exception",key);
        }
        return "";
    }

    /**
     * 作者：闫广坤
     * 创建时间：2014-12-09 上午11:21:31
     * 方法描述：通过key，获取配置项的值。
     * @param key
     * @param defaultValue 找不到时的默认值。
     * @return 配置项的值。
     */
    public String getString(String key,String defaultValue) {

        try {
            String value = "";

//            if(CacheManager.isInit()) {
//                value = CacheManager.get("sys_config_" +key);
//                if(StringUtils.isNotEmpty(value))
//                    return value;
//            }

            SysConfig sysConfig = sysConfigMapper.selectByConfigKey(key, getConfigPrefix());
            if (sysConfig == null) {
                value = "";
            } else {
                value = sysConfig.getConfigValue();
            }

            if (StringUtils.isBlank(value)) return defaultValue;

//            if(CacheManager.isInit()) {
//                CacheManager.set("sys_config_" +key,sysConfig.getConfigValue(), 2 * 60 * 60);
//            }
            return value;
        } catch (Exception e) {
            e.printStackTrace();
//            throw new EbsException(e);
        }
        return "";
    }


    public String getConfigPrefix() {
        if(StringUtils.isEmpty(WebUtil.configPrefix))
            WebUtil.configPrefix = "local";
        return WebUtil.configPrefix;
    }
}
